﻿/*
SINACOR - BMF&Bovespa
Arquivo: Operador.cs
Criado em: 27-nov-2009 11:59:19
Arquiteto Responsvel: RAMelo.7Comm
*/
using System;
using Sinacor.Infra.UI.Common;
using Sinacor.Infra.UI.Security.Services;
using System.Collections.Generic;
using Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Operador.Operador;

namespace Sinacor.UI.Bovespa.Alocacao.Communication.Translator.DataContractToModel
{

    /// <summary>
    /// Class Operador
    /// </summary>
    public class Operador
    {

        #region Construtores
        public Operador() { }
        #endregion Construtores

        #region Metodos
        
        /// <summary>
        /// ToOperador
        /// </summary>
        /// <param name="from"></param>
        /// <returns></returns>
        public Model.Operador ToOperador(OperadorResponse from)
        {
            Model.Operador retorno = null;

            if (from != null)
            {
                retorno = new Model.Operador();
                retorno.Bloqueado = from.Bloqueado;
                retorno.CodigoOperador = from.CodigoOperador;
                retorno.CodigoOperadorMegaBolsa = from.CodigoOperadorMegaBolsa;
                retorno.CodigoOperadorRendaFixa = from.CodigoOperadorRendaFixa;
                retorno.IndicadorDesprezaOperadorSinalOfertasMegaBolsa = from.IndicadorDesprezaOperadorSinalOfertasMegaBolsa;
                retorno.IndicadorOperadorHomeBroker = from.IndicadorOperadorHomeBroker;
                retorno.IndicadorPontaMesa = from.IndicadorPontaMesa;
                retorno.LoginOperador = from.LoginOperador;
                retorno.NomeOperador = from.NomeOperador;
                retorno.Subordinado = from.Subordinado;
            }

            return retorno;
        }        
        /// <summary>
        /// ToOperador - List
        /// </summary>
        /// <param name="from"></param>
        /// <returns></returns>
        public ModelCollection<Model.Operador> ToOperador(List<OperadorResponse> from)
        {
            ModelCollection<Model.Operador> retorno = null;

            if (from != null)
            {
                retorno = new ModelCollection<Model.Operador>();

                foreach (Bovespa.Operador.Operador.OperadorResponse item in from)
                {
                    retorno.Add(this.ToOperador(item));
                }
            }

            return retorno;

        }
        /// <summary>
        /// ToPreferencias
        /// </summary>
        /// <param name="from"></param>
        /// <returns></returns>
        public Model.Preferencias ToPreferencias(PreferenciasResponse from)
        {
            Model.Preferencias retorno = null;

            if (from != null)
            {
                retorno = new Model.Preferencias();
                retorno.Bolsa = from.Bolsa;
                retorno.Bolsa = from.Bolsa;
                retorno.CodigoOperador = from.CodigoOperador;

                #region EnumMercado
                if (from.Mercado.HasValue)
                {
                    switch (from.Mercado.Value)
                    {
                        case TipoMercado.BOX:
                            retorno.Mercado = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.BOX;
                            break;
                        case TipoMercado.CotasETF:
                            retorno.Mercado = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.CotasETF;
                            break;
                        case TipoMercado.Estruturado:
                            retorno.Mercado = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.Estruturado;
                            break;
                        case TipoMercado.ExercicioOpcaoCompra:
                            retorno.Mercado = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.ExercicioOpcaoCompra;
                            break;
                        case TipoMercado.ExercicioOpcaoVenda:
                            retorno.Mercado = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.ExercicioOpcaoVenda;
                            break;
                        case TipoMercado.Fracionario:
                            retorno.Mercado = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.Fracionario;
                            break;
                        case TipoMercado.Futuro:
                            retorno.Mercado = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.Futuro;
                            break;
                        case TipoMercado.IntegralizacaoResgateCotas:
                            retorno.Mercado = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.IntegralizacaoResgateCotas;
                            break;
                        case TipoMercado.Leilao:
                            retorno.Mercado = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.Leilao;
                            break;
                        case TipoMercado.LeilaoNaoCotados:
                            retorno.Mercado = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.LeilaoNaoCotados;
                            break;
                        case TipoMercado.OpcaoCompra:
                            retorno.Mercado = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.OpcaoCompra;
                            break;
                        case TipoMercado.OpcaoVenda:
                            retorno.Mercado = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.OpcaoVenda;
                            break;
                        case TipoMercado.Termo:
                            retorno.Mercado = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.Termo;
                            break;
                        case TipoMercado.VencimentoFuturo:
                            retorno.Mercado = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.VencimentoFuturo;
                            break;
                        case TipoMercado.Vista:
                            retorno.Mercado = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.Vista;
                            break;
                    }
                }                
                #endregion

                #region EnumOrdem
                if (from.Ordem.HasValue)
                {
                    switch (from.Ordem.Value)
                    {
                        case TipoOrdem.Administrada:
                            retorno.Ordem = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoOrdem.Administrada;
                            break;
                        case TipoOrdem.Casada:
                            retorno.Ordem = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoOrdem.Casada;
                            break;
                        case TipoOrdem.Discricionaria:
                            retorno.Ordem = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoOrdem.Discricionaria;
                            break;
                        case TipoOrdem.Financiamento:
                            retorno.Ordem = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoOrdem.Financiamento;
                            break;
                        case TipoOrdem.Limitada:
                            retorno.Ordem = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoOrdem.Limitada;
                            break;
                        case TipoOrdem.Mercado:
                            retorno.Ordem = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoOrdem.Mercado;
                            break;
                        case TipoOrdem.OnStop:
                            retorno.Ordem = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoOrdem.OnStop;
                            break;
                    }
                }
                #endregion

                retorno.OrdemModoInsert = from.OrdemModoInsert;
                retorno.OrdenaDigitacaoDecrescente = from.OrdenaDigitacaoDecrescente;
                retorno.PopulaLoteAutomaticamenteAposInsercao = from.PopulaLoteAutomaticamenteAposInsercao;
                retorno.PopulaLoteAutomaticamenteAposPreBoleto = from.PopulaLoteAutomaticamenteAposPreBoleto;
                retorno.UtilizaDataPreBoleto = from.UtilizaDataPreBoleto;
            }

            return retorno;
        }
        #endregion Metodos

    }

}